home *** CD-ROM | disk | FTP | other *** search
- 10 '***********************************
- 20 ' F-BASIC386 V2.1 L10以降対応
- 30 ' アドベンチャー2 システム
- 40 ' 【めちゃんこべえしっく言語】
- 50 ' Copyright(C) 1994 おこめ
- 60 '***********************************
- 70 CLEAR ,,512,340000,0,450000:DEFINT A-Z:DEFLNG M,I:ON ERROR GOTO *ERR
- 80 DIM TXT$(8000),A$(128),B$(255),M(10000),I&(10),T(20000)
- 90 DIM S(100000),ST(256),LB$(500),LB(500)
- 100 COLOR 7,0,7,4:WIDTH 80,25:CLS
- 110 SCREEN 1,0,3,1:SCREEN@1:LOAD@ "GAMEN.TIF":SCREEN 1,1:SCREEN@0
- 120 IP=0:IPS=-1:SP=0:LP=500:I=0
- 130 TX=172:TY=343:TX2=620:TY2=470:MX=TX:MY=TY:MSG=7
- 140 NA$="GAME.AGS"
- 150 OPEN "I",#1,NA$
- 160 IF EOF(1) THEN CLOSE:GOTO 180
- 170 LINE INPUT #1,TXT$(I):I=I+1:GOTO 160
- 180 *MAIN A$=TXT$(IP)
- 190 IF A$="" THEN GOSUB *MSG:GOTO 400 ELSE IF KTYPE(A$,1)=1 OR ASC(A$)=47 OR ASC(A$)=36 THEN GOSUB *MSG:GOTO 400
- 200 GOSUB *GVA
- 210 IF INSTR(A$(0),"=") THEN GOSUB *M0
- 220 IF INSTR(A$(0),".") THEN GOSUB *GLOAD
- 230 IF A$(0)="#" THEN GOSUB *MSGW
- 240 IF A$(0)="$" THEN GOSUB *KANE2
- 250 IF A$(0)="ITEMSET" THEN GOSUB *ITEMSET
- 260 IF A$(0)="GO" THEN GOSUB *GO
- 270 IF A$(0)="GOTO" THEN GOSUB *GOT
- 280 IF A$(0)="GOSUB" THEN GOSUB *GOS
- 290 IF A$(0)="CMD" OR A$(0)="CMDS" THEN GOSUB *CMD
- 300 IF A$(0)="ITEM" THEN GOSUB *ITM
- 310 IF A$(0)="ON" THEN GOSUB *ON
- 320 IF A$(0)="CLS" THEN GOSUB *CLS
- 330 IF A$(0)="IF" THEN GOSUB *IF
- 340 IF A$(0)="RET" THEN GOSUB *RET
- 350 IF A$(0)="RETURN" THEN GOSUB *RETU
- 360 IF A$(0)="WAIT" THEN GOSUB *WAIT
- 370 IF A$(0)="LOAD" THEN GOSUB *DLOAD
- 380 IF A$(0)="SAVE" THEN GOSUB *DSAVE
- 390 IF A$(0)="END" THEN *END
- 400 IP=IP+1:GOTO 180
- 410 *ERR IF ERR=64 AND ERL=2180 THEN KILL "AGS1"+N$:KILL "AGS2"+N$:KILL "ADVG"+N$:RESUME
- 420 SYMBOL(0,0),STR$(ERR)+STR$(ERL),2,2,2:END
- 430 *GVA I=0:J=0:A$=TXT$(IP):A$(0)=""
- 440 IF A$="" THEN A$(I)="":A$=TXT$(IP):RETURN
- 450 K=INSTR(A$," "):K2=INSTR(A$,",")
- 460 IF K2>0 AND K>K2 THEN K=K2
- 470 IF K=1 THEN J=1:A$=MID$(A$,2):GOTO 440
- 480 IF J=1 THEN J=0:IF A$(0)<>"" THEN I=I+1:A$(I)=""
- 490 IF K=0 THEN A$(I)=A$:A$(I+1)="":A$=TXT$(IP):RETURN
- 500 A$(I)=A$(I)+LEFT$(A$,1):A$=MID$(A$,2):GOTO 440
- 510 *LAB IF LEFT$(A$(1),1)="M" THEN A$=A$(1):J=1:GOTO *SK
- 520 J=0:I=SEARCH(LB$,A$(1),LP)
- 530 IF I=-1 THEN
- 540 J=SEARCH(TXT$,A$(1)):I=J
- 550 IF J=-1 THEN RETURN ELSE LP=LP-1:LB$(LP)=A$(1):LB(LP)=J:I=J
- 560 ELSE
- 570 I=LB(I)
- 580 ENDIF
- 590 RETURN
- 600 *MSG GOSUB *MSGS
- 610 B$=KLEFT$(A$,1):A$=KMID$(A$,2)
- 620 IF B$="/" THEN A$(0)=A$:J=1:A$(1)=A$:GOSUB *SK:MSG=I:A$=KMID$(A$(0),KLEN(STR$(I))):GOTO 680
- 630 IF B$="$" THEN A$(0)=A$:J=1:A$(1)=A$:GOSUB *KANE:A$=A$(0):GOTO 680
- 640 IF B$<>" " AND B$<>" " THEN BEEP 1:SYMBOL(MX,MY),B$,1,1,7:BEEP 0
- 650 MX=MX+LEN(B$)*8
- 660 IF MX>TX2-15 AND LEN(A$) THEN MX=TX:MY=MY+17
- 670 GOSUB *MSGS
- 680 IF PTRIG(1) AND 2 THEN 700
- 690 WAIT MSG-1
- 700 IF A$<>"" THEN 610
- 710 MX=TX:MY=MY+17:RETURN
- 720 *MSGS IF MY<TY2-15 THEN RETURN
- 730 MY=MY-17:GET@A(170,343)-(629,496),T
- 740 FOR I=1 TO 17 STEP 2
- 750 PUT@A(170,343)-(629,496),T,,,,,I*116:NEXT:RETURN
- 760 *MSGW
- 770 IF (PTRIG(1) AND 1)=0 THEN 770
- 780 IF PTRIG(1) AND 1 THEN 780
- 790 RETURN
- 800 *KANE A$=AKCNV$(MID$(STR$(M(KNP)),2+(LEFT$(STR$(KNP),1)="-")))+A$:RETURN
- 810 *KANE2 A$=A$(1):J=1:GOSUB *SK:KNP=I:RETURN
- 820 *GO GOSUB *LAB:IF I>-1 THEN IPS=IP:IP=I:RETURN ELSE END
- 830 *RET IF IPS<>-1 THEN IP=IPS:IPS=-1
- 840 RETURN
- 850 *GOT GOSUB *LAB:IF I>-1 THEN IP=I
- 860 RETURN
- 870 *GOS GOSUB *LAB:IF I>-1 THEN SP=SP+1:ST(SP)=IP:IP=I
- 880 RETURN
- 890 *RETU IP=ST(SP):SP=SP-1:RETURN
- 900 *END END
- 910 *GLOAD A$=MID$(A$(0),INSTR(A$(0),".")+1)
- 920 SCREEN 1,0
- 930 IF A$="TIF" OR A$="JPG" THEN LOAD@ A$(0)
- 940 IF A$="SND" THEN PLAY OFF:LOAD@ A$(0),S:PCMPLAY S,127
- 950 IF A$="EUP" THEN PLAY OFF:LOAD@ A$(0),S:PLAY@ S
- 960 IF A$="AGS" THEN GOSUB *NFIL
- 970 IF A$="MVE" THEN GOSUB *MVEP
- 980 SCREEN 1,1:RETURN
- 990 *NFIL NA$=A$(0):IPS=-1:SP=0:GOSUB 1000:GOTO *GOT
- 1000 I=0:OPEN "I",#1,NA$
- 1010 WHILE EOF(1):LINE INPUT #1,TXT$(I):I=I+1:WEND:CLOSE #1
- 1020 LP=500:LB$(LP)="":I=0:RETURN
- 1030 *MVEP GET@A(0,0)-(319,239),S:PLAY OFF
- 1040 MOVIE OPEN A$(0)
- 1050 MOVIE INFO 1,I&
- 1060 I=85-I&(7)/2:IF I<0 THEN I=0
- 1070 DEF MOVIE 1,(160-I&(6)/2,I)
- 1080 MOVIE PLAY
- 1090 MOVIE CLOSE
- 1100 PUT@A(0,0)-(319,239),S
- 1110 RETURN
- 1120 *ON IF A$(1)="CMD" OR A$(1)="CMDS" THEN A$(0)=A$(1):A$(1)=A$(2):A$(2)=A$(3):GOSUB *CMDS:I=KC:J=1 ELSE A$=A$(1):J=1:GOSUB *SK:J=0
- 1130 A$(0)=A$(2+J):'SYMBOL(0,20),A$(0),2,2,7
- 1140 IF LEFT$(A$(0),2)="GO" THEN J=J+1
- 1150 J=I+J+1
- 1160 IF I>0 AND SEARCH(A$,"")>J THEN
- 1170 A$(1)=A$(J)
- 1180 IF INSTR(A$(1),".") THEN A$(0)=A$(1):GOTO *GLOAD
- 1190 IF A$(0)="GOTO" THEN *GOT
- 1200 IF A$(0)="GOSUB" THEN *GOS
- 1210 GOTO *GO
- 1220 ENDIF
- 1230 RETURN
- 1240 IF I>0 AND SEARCH(A$,"")>I+2 THEN A$(1)=A$(I+2):GOTO *GO
- 1250 RETURN
- 1260 *CMD SWAP A$(1),A$(2):GOSUB *CMDS:J=2:GOSUB *SK:M(I)=KC:RETURN
- 1270 *CMDS GOSUB *LAB:J=1
- 1280 IF CMDLV<>I THEN KC=1:CMDLV=I
- 1290 LINE(0,343)-(TX-10,479),PSET,0,BF
- 1300 IF TXT$(I+J)="#" OR TXT$(I+J)="" THEN 1330
- 1310 SYMBOL(40,328+J*17),TXT$(I+J),1,1,7
- 1320 J=J+1:GOTO 1300
- 1330 IF PAD(1)+PTRIG(1) THEN 1330
- 1340 SYMBOL(22,328+KC*17),"◆",1,1,7
- 1350 KKK=0:P=P+T
- 1360 WHILE P AND (KKK<1000)
- 1370 P=PAD(1)+PTRIG(1):KKK=KKK+1:WEND
- 1380 KC2=KC:P=PAD(1):T=PTRIG(1)
- 1390 IF P+T=0 THEN 1380
- 1400 IF P=1 AND KC>1 THEN KC=KC-1
- 1410 IF P=5 AND KC<J-1 THEN KC=KC+1
- 1420 IF (T AND 1)=1 THEN 1450
- 1430 IF A$(0)="CMDS" AND T=2 THEN KC=0:GOTO 1450
- 1440 SYMBOL(22,328+KC2*17),"◆",1,1,0:GOTO 1330
- 1450 A$=A$(2):SYMBOL(22,328+KC2*17),"◆",1,1,0:RETURN
- 1460 *M0 A$=TXT$(IP):J2=INSTR(A$,"="):J=J2+1:GOSUB *SK
- 1470 K2=I:J=2:A$=LEFT$(TXT$(IP),J2-1):GOSUB *SK:M(I)=K2:RETURN
- 1480 *SKGVA I=0:Z=1:B$(0)=""
- 1490 IF A$="" THEN RETURN
- 1500 IF J>LEN(A$) THEN B$(I+1)="":RETURN
- 1510 IF KTYPE(A$,J) THEN B$(I+1)="":RETURN
- 1520 IF MID$(A$,J,1)=" " THEN J=J+1:GOTO 1520
- 1530 IF INSTR("*/+-^=&|M()@",MID$(A$,J,1)) THEN
- 1540 IF Z=0 THEN I=I+1
- 1550 B$(I)=MID$(A$,J,1):J=J+1:I=I+1:Z=1:B$(I)="":GOTO 1500
- 1560 ENDIF
- 1570 B$(I)=B$(I)+MID$(A$,J,1):J=J+1:Z=0
- 1580 GOTO 1500
- 1590 *D2 HZ=2
- 1600 ST(SP+1)=I:J=J-1:B$(J-HZ)=STR$(I):I=0
- 1610 I=I+1:B$(J-HZ+I)=B$(J+I):IF B$(J+I)<>"" THEN 1610
- 1620 I=ST(SP+1):J=J-HZ+1:RETURN
- 1630 *SK GOSUB *SKGVA:J=0:K=I:F=0
- 1640 GOSUB 1970
- 1650 ST(SP+1)=F:SP=SP+2:ST(SP)=I
- 1660 IF B$(J)="+" AND F<=8 THEN
- 1670 F=8:GOSUB 1960:I=ST(SP)+I:GOSUB *D2
- 1680 ELSE IF B$(J)="*" AND F<=9 THEN
- 1690 F=9:GOSUB 1960:I=ST(SP)*I:GOSUB *D2
- 1700 ELSE IF B$(J)="/" AND F<=9 THEN
- 1710 F=9:GOSUB 1960:I=ST(SP)/I:GOSUB *D2
- 1720 ELSE IF B$(J)="%" AND F<=9 THEN
- 1730 F=9:GOSUB 1960:I=ST(SP) MOD I:GOSUB *D2
- 1740 ELSE IF B$(J)="^" AND F<=10 THEN
- 1750 F=10:GOSUB 1960:I=ST(SP)^I:GOSUB *D2
- 1760 ELSE IF B$(J)="-" AND F<=8 THEN
- 1770 F=8:GOSUB 1960:I=ST(SP)-I:GOSUB *D2
- 1780 ELSE IF B$(J)=">" AND F<=7 THEN
- 1790 F=7:GOSUB 1960:I=(ST(SP)>I):GOSUB *D2
- 1800 ELSE IF B$(J)="<" AND F<=7 THEN
- 1810 F=7:GOSUB 1960:I=(ST(SP)<I):GOSUB *D2
- 1820 ELSE IF B$(J)="=" AND F<=6 THEN
- 1830 F=6:GOSUB 1960:I=(ST(SP)=I):GOSUB *D2
- 1840 ELSE IF B$(J)="&" AND F<=5 THEN
- 1850 F=5:GOSUB 1960:I=ST(SP) AND I:GOSUB *D2
- 1860 ELSE IF B$(J)="X" AND F<=4 THEN
- 1870 F=4:GOSUB 1960:I=ST(SP) XOR I:GOSUB *D2
- 1880 ELSE IF B$(J)="|" AND F<=3 THEN
- 1890 F=3:GOSUB 1960:I=ST(SP) OR I:GOSUB *D2
- 1900 ELSE IF B$(J)="A" AND F<=2 THEN
- 1910 F=2:GOSUB 1960:I=((ST(SP) AND I)<>0):GOSUB *D2
- 1920 ELSE IF B$(J)="O" AND F<=1 THEN
- 1930 F=1:GOSUB 1960:I=((ST(SP) OR I)<>0):GOSUB *D2
- 1940 ENDIF
- 1950 F=ST(SP-1):SP=SP-2:RETURN
- 1960 J=J+1
- 1970 IF B$(J)="M" THEN '変数
- 1980 IF B$(J+1)="(" THEN J=J+2:GOSUB 1640:J=J+1:HZ=3:GOSUB 1600:J=J-1 ELSE J=J+1:I=VAL(B$(J))
- 1990 I=M(I)
- 2000 ELSE IF B$(J)="(" THEN
- 2010 J=J+1:GOSUB 1640:J=J+1:GOSUB *D2:J=J-1
- 2020 ELSE IF B$(J)="*" OR B$(J)="@" THEN
- 2030 WHILE B$(J+1)<>"":J=J+1:B$(J)=B$(J-1)+B$(J):WEND
- 2040 A$(1)=B$(J):GOSUB *LAB
- 2050 ELSE
- 2060 IF B$(J)="-" THEN J=J+1:I=-VAL(B$(J)) ELSE I=VAL(B$(J))
- 2070 ENDIF
- 2080 J=J+1:RETURN
- 2090 *IF A$=A$(1):J=1:GOSUB *SK:IF I=0 THEN RETURN
- 2100 IF A$(2)="THEN" THEN A$(2)=A$(3):A$(3)=A$(4):A$(4)=A$(5)
- 2110 IF LEFT$(A$(2),2)="GO" THEN A$(1)=A$(3) ELSE A$(1)=A$(2)
- 2120 IF A$(2)="GOTO" THEN *GOT
- 2130 IF A$(2)="GOSUB" THEN *GOS
- 2140 GOTO *GO
- 2150 *CLS LINE(TX,343)-(639,479),PSET,0,BF:MY=343:RETURN
- 2160 *DSAVE A$=A$(1):J=1:GOSUB *SK:ST(0)=SP
- 2170 N$=RIGHT$("0000"+HEX$(I),4)+".DAT"
- 2180 SAVE@ "AGS1"+N$,M:SAVE@ "AGS2"+N$,ST
- 2190 OPEN "O",#1,"ADVG"+N$:PRINT #1,NA$:PRINT #1,MKL$(IP);MSG
- 2200 CLOSE #1:I=1:RETURN
- 2210 *DLOAD A$=A$(1):J=1:GOSUB *SK
- 2220 N$=RIGHT$("0000"+HEX$(I),4)+".DAT"
- 2230 LOAD@ "AGS1"+N$,M:LOAD@ "AGS2"+N$,ST:SP=ST(0)
- 2240 OPEN "I",#1,"ADVG"+N$:LINE INPUT #1,NA$:A$=INPUT$(4,1):IP=CVL(A$)
- 2250 INPUT #1,MSG:CLOSE #1:GOSUB 1000:I=2:RETURN
- 2260 *WAIT A$=A$(1):J=1:GOSUB *SK:WAIT I:RETURN
- 2270 *ITEMSET A$=A$(1):GOSUB *SK:ITM=I:RETURN
- 2280 *ITM RETURN
-